package com.xjaq.dify.service;

import com.xjaq.dify.common.Result;
import com.xjaq.dify.entity.*;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;

public interface IPsyAiChatService {
    /**
     * 发送聊天消息并以SSE流式方式返回响应
     * @param difyRequest 聊天请求参数
     * @return ResponseBodyEmitter 流式响应发射器
     */
    ResponseBodyEmitter sseChatPrompt(DifyRequest difyRequest);

    /**
     * 上传文件并发起聊天请求
     * @param difyRequest 包含文件的聊天请求参数
     * @return ResponseBodyEmitter 流式响应发射器
     */
    ResponseBodyEmitter uploadPrompt(DifyRequest difyRequest);

    /**
     * 停止聊天任务
     * @param taskId 任务ID
     * @param user 用户标识
     * @return Result 停止结果
     */
    Result stopChatTask(String taskId, String user);
    
    /**
     * 消息反馈（点赞/点踩）
     * @param messageId 消息ID
     * @param feedbackRequest 反馈请求参数
     * @return Result 反馈结果
     */
    Result messageFeedback(String messageId, FeedbackRequest feedbackRequest);
    
    /**
     * 获取应用反馈列表
     * @param page 页码
     * @param limit 每页数量
     * @return Result 应用反馈列表
     */
    Result getAppFeedbacks(Integer page, Integer limit);
    
    /**
     * 获取建议问题列表
     * @param messageId 消息ID
     * @param user 用户标识
     * @return Result 建议问题列表
     */
    Result getSuggestedQuestions(String messageId, String user);
    
    /**
     * 获取消息历史记录
     * @param query 消息历史查询参数
     * @return Result 消息历史记录
     */
    Result getMessageHistory(MessageHistoryQuery query);
    
    /**
     * 获取会话列表
     * @param query 会话查询参数
     * @return Result 会话列表
     */
    Result getConversations(ConversationQuery query);
    
    /**
     * 删除会话
     * @param conversationId 会话ID
     * @param user 用户标识
     * @return Result 删除结果
     */
    Result deleteConversation(String conversationId, String user);
    
    /**
     * 重命名会话
     * @param conversationId 会话ID
     * @param request 重命名请求参数
     * @return Result 重命名结果
     */
    Result renameConversation(String conversationId, ConversationRenameRequest request);
    
    /**
     * 获取会话变量
     * @param conversationId 会话ID
     * @param query 会话变量查询参数
     * @return Result 会话变量
     */
    Result getConversationVariables(String conversationId, ConversationVariablesQuery query);
    
    /**
     * 音频转文字
     * @param request 音频转文字请求参数
     * @return Result 转换结果
     */
    Result audioToText(AudioToTextRequest request);
    
    /**
     * 文字转音频
     * @param request 文字转音频请求参数
     * @return Result 转换结果
     */
    Result textToAudio(TextToAudioRequest request);
    
    /**
     * 获取应用基本信息
     * @return Result 应用基本信息
     */
    Result getAppInfo();
    
    /**
     * 获取应用Meta信息
     * @return Result 应用Meta信息
     */
    Result getAppMeta();
    
    /**
     * 获取Web应用设置
     * @return Result Web应用设置
     */
    Result getWebAppSettings();
    
    /**
     * 获取标注列表
     * @param page 页码
     * @param limit 每页数量
     * @return Result 标注列表
     */
    Result getAnnotations(Integer page, Integer limit);
    
    /**
     * 创建标注
     * @param request 创建标注请求参数
     * @return Result 创建结果
     */
    Result createAnnotation(CreateAnnotationRequest request);
    
    /**
     * 更新标注
     * @param annotationId 标注ID
     * @param request 更新标注请求参数
     * @return Result 更新结果
     */
    Result updateAnnotation(String annotationId, UpdateAnnotationRequest request);
    
    /**
     * 删除标注
     * @param annotationId 标注ID
     * @return Result 删除结果
     */
    Result deleteAnnotation(String annotationId);
    
    /**
     * 标注回复设置
     * @param action 操作类型
     * @param request 标注回复请求参数
     * @return Result 设置结果
     */
    Result annotationReply(String action, AnnotationReplyRequest request);
    
    /**
     * 获取标注回复任务状态
     * @param action 操作类型
     * @param jobId 任务ID
     * @return Result 任务状态
     */
    Result getAnnotationReplyStatus(String action, String jobId);
    
    /**
     * 上传文件
     * @param file 要上传的文件
     * @param user 用户标识
     * @return Result 上传结果
     */
    Result uploadFile(org.springframework.web.multipart.MultipartFile file, String user);

}